/* Die Klasse Hausnummer
 * 
 * Die Klasse hausnummer erfasst die Hausnummer. Hierbei ist es moeglich 
 * eine Hausnummer als normalen Integer zu übergeben oder als String, 
 * wenn es einen Zusatz gib.
 * 
 * Datei:  Hausnummer.java      	Autor:    Martin Fischer
 * Datum:  13.11.2011             	Version:  1.0
 *
 *
 */

package kommunikation;

import java.io.Serializable;
import GUI.Dashboard;
import kommunikation.Parser.HausnummerParser;


public class Hausnummer implements Serializable
{
  private static final long serialVersionUID = -1980378074100155322L;
  private int hausnummer;		/* zb 10 			*/
  private String gesamteHausnummer;	/* zb 10a-11b 			*/
  private Uebersetzung uebersetzung;	

  
  /*
   * Im Konstruktor wird die Hausnummer als String uebergeben
   */
  public Hausnummer (String gesamteHausnummer)
  {
    /*
     * erzeuge ein Objekt der Klasse Uebersetzung mit der verwendeten 
     * Sprache 
     */
    uebersetzung = new  Uebersetzung (Dashboard.
        verwendeteSprache ().toString ());
    if (!istGueltigeHausnummer (gesamteHausnummer))
    {
      /*
       * werfe eine Ausnahme, wenn die E-mail nicht erkannt wird
       */
      throw new UngueltigeEingabeAusnahme (
	  uebersetzung.lokal.gibUebersetzung ("FHNP"));
    }
    else
    {
      this.gesamteHausnummer = gesamteHausnummer;
      /*
       * E-Mail wurde als gueltig erkannt und uebernommen
       */
    }
  }


  /*
   * Im Konstruktor wird die Hausnummer Als Integer ohne Zusatz 
   * uebergeben
   */
  public Hausnummer (int hausnummer)
  {
    /*
     * erzeuge ein Objekt der Klasse Uebersetzung mit der verwendeten 
     * Sprache 
     */
    uebersetzung = new  Uebersetzung (Dashboard.
        verwendeteSprache ().toString ());
    if (!istGueltigeHausnummer ( nachStringKonvertieren (hausnummer)))
    {
      /*
       * werfe eine Ausnahme, wenn die E-mail nicht erkannt wird
       */
      throw new UngueltigeEingabeAusnahme (
	  uebersetzung.lokal.gibUebersetzung ("FEP"));
    }
    else
    {
      this.hausnummer = hausnummer;
      /*
       * E-Mail wurde als gueltig erkannt und uebernommen
       */
    }
  }

  
  /*
   * Konvertiert eine Integerzahl in einen String
   */
  public String nachStringKonvertieren (int plz)
  {
    Integer i = new Integer (plz);
    return i.toString ();
  }
  
   
  /*
   * Setzt die Hausnummer
   */
  public void setzeHausnummer (int hausnummer)
  {
    if (!istGueltigeHausnummer ( nachStringKonvertieren (hausnummer)))
    {
      /*
       * werfe eine Ausnahme, wenn die E-mail nicht erkannt wird
       */
      throw new UngueltigeEingabeAusnahme (
	  uebersetzung.lokal.gibUebersetzung ("FEP"));
    }
    else
    {
      this.hausnummer = hausnummer;
      /*
       * E-Mail wurde als gueltig erkannt und uebernommen
       */
    }
  }

  
  /*
   * gibt die Hausnummer zurueck
   */
  public int gibHausnummer ()
  {
    return hausnummer;
  }

  
  /*
   * setze die gesamte Hausnummer 
   */
  public void setzeGesamteHausnummer (String gesamteHausnummer)
  {
    if (!istGueltigeHausnummer (gesamteHausnummer))
    {
      /*
       * werfe eine Ausnahme, wenn die E-mail nicht erkannt wird
       */
      throw new UngueltigeEingabeAusnahme (
	  uebersetzung.lokal.gibUebersetzung ("FEP"));
    }
    else
    {
      this.gesamteHausnummer = gesamteHausnummer;
      /*
       * E-Mail wurde als gueltig erkannt und uebernommen
       */
    }
  }


  /*
   * gib die gesamte Hausnummer zurueck
   */
  public String gibGesamteHausnummer ()
  {
    return gesamteHausnummer;
  }


  /*
   * prueft ob der Hausnummer einer gueltigen Schreibweise entspricht
   */
  public boolean istGueltigeHausnummer (String zupruefendeHausnumer)
  {
    HausnummerParser hnp = new HausnummerParser ();
    hnp.initialisieren (zupruefendeHausnumer);
    /*
     * der Parser arbeitet solange bis sich die Maschine in eimem
     * Endzustand oder sich in einem Fehlerzustand befindet
     */
    while (!hnp.getAktuellenZusatnd ().istEndzustand ()&& 		
	!hnp.istImFehlerzustand ())
    {
      /*
       * hier findet das Schrittweise ueberpruefen des Wortes statt
       */
      hnp.arbeiten ();
    }
    /*
     * wenn dich der Parser im Fehlerzustand befindet wird ein 
     * false zurueckgegeben fuer nicht erkannt
     */
    if (hnp.istImFehlerzustand ())
    {
      return false;
    }
    /*
     * das Wort wurde erkannt
     */
    return true;
  }
}
